package com.plugin.manage.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.plugin.core.model.entity.ElderCheckOut;
import com.plugin.manage.common.PageResult;
import com.plugin.manage.pojo.vo.ElderCheckoutApplymentVO;
import com.plugin.manage.pojo.vo.ElderCheckoutDynamicVO;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 退住记录服务接口
 *
 * @author mark
 * @date 2025-08-04
 */
public interface ICheckoutService extends IService<ElderCheckOut> {

    /**
     * 获取总退住记录数量（不筛选approval_status）
     * 
     * @return 总退住记录数量
     */
    Long getTotalCheckoutCount();
    
    /**
     * 获取approval_status=1的退住记录数量
     * 
     * @return approval_status=1的退住记录数量
     */
    Long getStatus1CheckoutCount();
    
    /**
     * 获取approval_status=2的退住记录数量
     * 
     * @return approval_status=2的退住记录数量
     */
    Long getStatus2CheckoutCount();
    
    /**
     * 获取approval_status=3的退住记录数量
     * 
     * @return approval_status=3的退住记录数量
     */
    Long getStatus3CheckoutCount();
    
    /**
     * 获取approval_status=4的退住记录数量
     * 
     * @return approval_status=4的退住记录数量
     */
    Long getStatus4CheckoutCount();
    
    /**
     * 获取所有审批状态的退住记录数量
     * 
     * @return 包含所有审批状态数量的Map
     */
    Map<String, Long> getAllStatusCheckoutCounts();
    
    /**
     * 查询长者姓名和退住状态
     * 
     * @return 长者姓名和退住状态列表
     */
    List<ElderCheckoutDynamicVO> queryElderNameAndStatus();
    
    /**
     * 查询退住申请详情
     * 
     * @param realname 长者姓名（可选）
     * @param startTime 开始时间（可选）
     * @param endTime 结束时间（可选）
     * @param sex 性别（可选）
     * @param roomNumber 房间号（可选）
     * @return 退住申请详情列表
     */
    PageResult<ElderCheckoutApplymentVO> queryCheckoutApplyments(Long current,Long size,                                                                 String realname,
                                                                 LocalDateTime startTime,
                                                                 LocalDateTime endTime,
                                                                 Integer sex,
                                                                 String roomNumber);
}
